import java.text.SimpleDateFormat
import java.util.Date

import scala.util.{Failure, Try}

object SuccessAndFailure {
  def main(args: Array[String]): Unit = {
    import scala.util.Try
//    println(Try(123)) //Success(123)

    import scala.util.Success
    import scala.util.Failure
//    Try("123a".toInt) match {
//      case Success(v) => println("这个值是  "+v)
//      case Failure(e) => println("转换失败  "+e.getMessage)
//    }

//    Try("1213a".toInt) match {
//      case Success(v) => println(v)
//      case Failure(e) => throw e
//    }

    //案例2
//    val t:Try[Int] = Success(100)
//    val e:Try[Int] = Failure(new Exception("error"))
//
//    println(isSuccess(t))
//    println(isSuccess(e))
//
//    def isSuccess(z:Try[Int]):Boolean = {
//      z match {
//        case Success(v) => true
//        case _ => false
//      }
//    }

    //案例3
//    val s:String = "10吖0"
//    println(isInt(s))
//
//    def isInt(s:String):Boolean = Try(s.toInt) match {
//      case Success(value) => true
//      case _ => false
//    }

//    println(isDate("2020-07-21"))
//
//    //案例4 scala代码和java代码的区别
//    def isDate(s:String):Boolean = Try {
//      val fmt = new java.text.SimpleDateFormat("yyyy-MM-dd")
//      fmt.parse(s)
//    }match {
//      case Success(dt) => true
//      case Failure(exception) => false
//    }

    //对比java
//    public Boolean isDate(String s) {
//      try{
//        SimpleDateFormat fmt = new java.text.SimpleDateFormat("yyyy-MM-dd")
//        fmt.parse(s)
//        return true;
//      }catch {
//        return false;
//      }
//    }

    //案例5 Either和Try结合
//    def getDate(s:String):Either[Date,Throwable] = Try {
//      val fmt = new java.text.SimpleDateFormat("yyyy-MM-dd")
//      val result = fmt.parse(s)
//      println(result)
//      result
//    }match {
//      case Success(value) => Left(value)
//      case Failure(exception) => Right(exception)
//    }
//
//    getDate("2020-07-21") match {
//      case Left(dt) => println("data is "+dt)
//      case Right(e) => throw e
//    }


  }


}
